
// Definition for singly-linked list.
struct ListNode
{
    int val;
    ListNode *next;
    ListNode(int x) : val(x), next(nullptr) {}
};

class Solution {
public:
    ListNode *getIntersectionNode(ListNode *headA, ListNode *headB) 
    {
        ListNode* curA=headA;
        int num1=0;
        while(curA)
        {
            curA=curA->next;
            num1++;
        }
        ListNode* curB=headB;
        int num2=0;
        while(curB)
        {
            curB=curB->next;
            num2++;
        }
        int n=num1>num2?num1-num2:num2-num1;
        curA=headA;
        curB=headB;
        if(num1>num2)
        {
            for(int i=0;i<n;i++)
            {
                curA=curA->next;
            }
        }
        else
        {
            for(int i=0;i<n;i++)
            {
                curB=curB->next;
            }
        }
        while(curA!=nullptr&&curB!=nullptr&&curA!=curB)
        {
            curA=curA->next;
            curB=curB->next;
        }
        return curB;
    }
};